import {
  reqAddOrUpdatePatient,
  reqAllPatient,
  reqDeletePatient,
} from '@/api/patient'
import type { Patient } from '@/api/patient/type'
import { ElMessage } from 'element-plus'
import { defineStore } from 'pinia'
import { ref } from 'vue'

// 就诊人相关的仓库
const usePatientStore = defineStore('patient', () => {
  // 存储全部就诊人的信息
  let allPatient = ref<Patient[]>([])
  // 控制就诊人卡片和修改卡片的切换
  let scene = ref(0) // 0: 显示就诊人卡片  1: 显示修改就诊人卡片
  // 存储表单收集的数据/修改前后就诊人的数据(新增无id更新有id)
  const patientData = ref<Patient>({
    id: null,
    address: '',
    birthdate: '',
    certificatesNo: '',
    certificatesType: '',
    contactsCertificatesNo: '',
    contactsCertificatesType: '',
    contactsName: '',
    contactsPhone: '',
    isInsure: 0,
    isMarry: 0,
    name: '',
    phone: '',
    sex: 1,
    addressSelected: [],
    userId: 1,
  })
  // 获取全部就诊人的方法
  const getAllPatient = async () => {
    let result = await reqAllPatient()
    if (result.code == 200) {
      // 存储全部就诊人的信息
      allPatient.value = result.data
      return 'ok'
    } else {
      ElMessage.error('获取就诊人数据失败')
      return Promise.reject(new Error(result.message))
    }
  }
  // 添加/修改就诊人的方法
  const updateOrAddPatient = async () => {
    // 发请求更新/修改就诊人信息
    let result = await reqAddOrUpdatePatient(patientData.value)
    if (result.code == 200) {
      ElMessage.success(
        `${patientData.value.id ? '更新' : '添加'}就诊人信息成功`,
      )
      // 切换场景
      scene.value = 0
      // 重新全部就诊人获取数据
      getAllPatient()
    } else {
      ElMessage.error(`${patientData.value.id ? '更新' : '添加'}就诊人信息失败`)
    }
  }
  // 删除就诊人的方法
  const deletePatient = async (id: number) => {
    let result = await reqDeletePatient(id)
    if (result.code === 200) {
      ElMessage.success('删除就诊人成功')
      // 重新获取全部就诊人信息
      getAllPatient()
    } else {
      ElMessage.error('删除就诊人失败')
    }
  }

  return {
    allPatient,
    scene,
    patientData,
    getAllPatient,
    updateOrAddPatient,
    deletePatient,
  }
})
export default usePatientStore
